#include "pthread.h"
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define NUM_THREADS 4

// 共享资源
int shared_counter = 0;
pthread_mutex_t mutex; // 互斥锁

// 增加计数器的函数，多个线程会同时调用这个函数
void* increment_counter(void* arg) {
    for (int i = 0; i < 100000; ++i) {
        pthread_mutex_lock(&mutex); // 加锁，开始临界区
        shared_counter++; // 对共享资源进行操作
        pthread_mutex_unlock(&mutex); // 解锁，结束临界区
    }
    return NULL;
}

int pthreadFunction(){
    pthread_t threads[NUM_THREADS]; // 存储线程的数组
    
    pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
    
    // 创建多个线程
    for (int i = 0; i < NUM_THREADS; ++i) {
        pthread_create(&threads[i], NULL, increment_counter, NULL);
    }
    
    // 等待所有线程执行完毕
    for (int i = 0; i < NUM_THREADS; ++i) {
        pthread_join(threads[i], NULL);
    }

    pthread_mutex_destroy(&mutex); // 销毁互斥锁

    printf("Final counter value: %d\n", shared_counter);
    
    return 0;
}

